
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>消息堆积调试方法 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>消息堆积调试方法 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在RocketMQ中，监控消息堆积问题时应关注哪些核心指标？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要有五个核心指标：1. 消息堆积量（未被消费的消息数量）；2. 消费延迟（消息从生产到被消费的时间间隔）；3. 消费TPS（每秒消费的消息数量）；4. 消费者数量（活跃消费者的数量）；5. 消费者负载（各个消费者的负载分布情况）。</div>
          </div>
          <div class="card-source">来源: 堆积问题的监控方法 - 监控指标</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">工具</div>
          <div class="card-question">文档中介绍了哪几种用于监控RocketMQ消息堆积的工具或方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">工具</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中介绍了四种工具或方法：1. RocketMQ Dashboard (官方Web管理控制台)；2. RocketMQ Console (基于命令行的监控工具)；3. JMX监控 (可与Prometheus、Grafana等系统集成)；4. 自定义监控 (基于RocketMQ的Admin API开发)。</div>
          </div>
          <div class="card-source">来源: 堆积问题的监控方法 - 监控工具</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">针对RocketMQ消息堆积问题，可以采用哪些监控策略来及时发现异常？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以采用四种监控策略：1. 阈值监控（设置堆积量的告警阈值）；2. 趋势监控（监控堆积量的变化趋势，持续增长是严重信号）；3. 差异监控（监控生产速率和消费速率的差异）；4. 周期性监控（考虑业务周期性，区分正常与异常堆积）。</div>
          </div>
          <div class="card-source">来源: 堆积问题的监控方法 - 监控策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">当发现RocketMQ消息堆积时，初步分析阶段应该执行哪些检查步骤？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">初步分析阶段应执行三个关键步骤：1. 确认堆积范围（确定是全局、特定Topic还是部分队列堆积）；2. 查看系统负载（检查Broker和消费者服务器的CPU、内存、磁盘IO、网络等资源）；3. 检查消费者状态（确认消费者是否在线、数量是否足够）。</div>
          </div>
          <div class="card-source">来源: 堆积原因的排查流程 - 初步分析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">请列举至少三种导致RocketMQ消息堆积的常见消费者端原因。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">常见的消费者端原因包括：1. 消费者性能问题（如业务逻辑复杂或外部系统交互慢）；2. 消费者数量不足（实例数量少于队列数量）；3. 系统资源瓶颈（如CPU过高或频繁GC）；4. 消费者配置不合理（如消费线程数过小）；5. 消费异常（逻辑异常导致消息不断重试）。</div>
          </div>
          <div class="card-source">来源: 堆积原因的排查流程 - 常见堆积原因</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">工具</div>
          <div class="card-question">如何使用 `mqadmin` 命令行工具查看特定消费组的消费状态和堆积情况？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">工具</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以使用命令 `sh mqadmin consumerStatus -g ConsumerGroupName -n namesrvAddr`。该命令的输出会显示每个队列的Broker Offset（生产消息总量）、Consumer Offset（已消费消息总量）以及二者之差Diff（即消息堆积量）。</div>
          </div>
          <div class="card-source">来源: 调试工具和命令的使用说明 - 命令行工具</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">在深入排查因“消费速度慢”导致的堆积时，应从哪些方面检查消费者？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">应从三个方面进行检查：1. 检查消费者的业务处理逻辑是否有性能问题；2. 查看消费者的GC情况，判断是否存在频繁的Full GC；3. 检查消费者的线程池配置是否合理。</div>
          </div>
          <div class="card-source">来源: 堆积原因的排查流程 - 深入排查</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">除了消费者自身问题，还有哪些其他类型的常见原因可能导致消息堆积？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">其他常见原因包括：1. 生产突增（业务高峰期或消息重放导致生产速率远超消费能力）；2. Broker问题（如Broker负载过高、配置不当或出现异常）；3. 网络问题（如网络延迟高或丢包率高）。</div>
          </div>
          <div class="card-source">来源: 堆积原因的排查流程 - 常见堆积原因 & 深入排查</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">对于严重的RocketMQ消息堆积，文档推荐了哪种处理策略，并涉及到哪个关键命令？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐了“分批处理堆积”的策略。具体做法是使用 `sh mqadmin resetOffsetByTime` 命令将消费位点重置到某个时间点，从而逐步消费堆积的消息，避免对系统造成过大压力。</div>
          </div>
          <div class="card-source">来源: 调试工具和命令的使用说明 - 调试最佳实践</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
